using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Montezuma
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        TesteRetangulo testeRetangulo;
        SpriteFont fonte;
        EstadoJogo estadoJogo;
        AreaAtual areaAtual;
        AreaAtual ultimaAreaAtual;
        Hud hud;
        TimeSpan tempoCordaContinuar = TimeSpan.Zero;
        KeyboardState teclado;

        Heroi heroi;

        Caveira inimigo;
        List<Inimigo> inimigos = new List<Inimigo>();

        List<Areas> areas = new List<Areas>();
        Area1_1 area1_1;
        Area1_2 area1_2;
        Area1_3 area1_3;
        Area1_4 area1_4;
        Area1_5 area1_5;
        Area1_6 area1_6;
        Area1_7 area1_7;

        List<Escada> escadas = new List<Escada>();
        Escada escada1;
        Escada escada2;
        Escada escada3;
        Texture2D texturaEscada;
        //Escada escada;

        List<Lanca> lancas = new List<Lanca>();
        List<Espinho> espinhos = new List<Espinho>();

        List<Corda> cordas = new List<Corda>();
        Corda corda;

        List<Esteira> esteiras = new List<Esteira>();

        List<Chave> chaves = new List<Chave>();
        Chave chave1_3;

        List<Porta> portas = new List<Porta>();
        Porta porta1_3;
        Porta porta1_7;

        List<PlataformaMovimento> plataformasMovimento = new List<PlataformaMovimento>();

        Rectangle retanguloEventoArea1_4;
        bool evento1_4 = true;
        TimeSpan tempoFimEvento = TimeSpan.Zero;

        Rectangle passagemSecreta1_2;
        Rectangle passagemSecreta1_2_2;
        Rectangle passagemSecreta1_6;
        Rectangle passagemSecreta1_6_2;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            graphics.PreferredBackBufferWidth = 900;
            graphics.PreferredBackBufferHeight = 600;
        }

        protected override void Initialize()
        {
            base.Initialize();
            estadoJogo = EstadoJogo.TITULO;
            areaAtual = AreaAtual.AREA1_1;
        }

        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            testeRetangulo = new TesteRetangulo(Content.Load<Texture2D>("retangulo"));
            fonte = Content.Load<SpriteFont>("fonte");
            hud = new Hud();

            texturaEscada = Content.Load<Texture2D>("Imagens/escada");
            escada1 = new Escada(texturaEscada, new Vector2(0, 0), 0, 0);
            escada2 = new Escada(texturaEscada, new Vector2(0, 0), 0, 0);
            escada3 = new Escada(texturaEscada, new Vector2(0, 0), 0, 0);
            //escada1 = new Escada(texturaEscada, new Vector2(417, 138), 72, 223);
            //escadas.Add(escada1);

            corda = new Corda(Content.Load<Texture2D>("retangulo"), new Vector2(0, 0), 0);

            chave1_3 = new Chave(Content.Load<Texture2D>("Imagens/chave"), new Vector2(54, 197), 1);
            //chaves.Add(chave1_3);

            porta1_3 = new Porta(Content.Load<Texture2D>("Imagens/porta"), new Vector2(853, 0), 1);
            porta1_7 = new Porta(Content.Load<Texture2D>("Imagens/porta"), new Vector2(30, -27), 3);

            heroi = new Heroi(Content.Load<Texture2D>("imagens/heroip"), new Vector2(50, 400));

            inimigo = new Caveira(Content.Load<Texture2D>("Imagens/caveira"), new Vector2(300, 300), 0, 900);

            area1_1 = new Area1_1(Content.Load<Texture2D>("Imagens/area 1"), Vector2.Zero, Color.White);
            area1_2 = new Area1_2(Content.Load<Texture2D>("Imagens/area 2"), Vector2.Zero, Color.White);
            area1_3 = new Area1_3(Content.Load<Texture2D>("Imagens/area3"), Vector2.Zero, Color.White);
            area1_4 = new Area1_4(Content.Load<Texture2D>("Imagens/area4"), Vector2.Zero, Color.White);
            area1_5 = new Area1_5(Content.Load<Texture2D>("Imagens/area5"), Vector2.Zero, Color.White);
            area1_6 = new Area1_6(Content.Load<Texture2D>("Imagens/area6"), Vector2.Zero, Color.White);
            area1_7 = new Area1_7(Content.Load<Texture2D>("Imagens/area7"), Vector2.Zero, Color.White);
            areas.Add(area1_1);
            areas.Add(area1_2);
            areas.Add(area1_3);
            areas.Add(area1_4);
            areas.Add(area1_5);
            areas.Add(area1_6);
            areas.Add(area1_7);

            retanguloEventoArea1_4 = new Rectangle(390, 405, 23, 141);

            passagemSecreta1_2 = new Rectangle(500, 540, 23, 42);
            passagemSecreta1_2_2 = new Rectangle(455, 540, 23, 42);

            passagemSecreta1_6 = new Rectangle(370, 0, 10, 210);
            passagemSecreta1_6_2 = new Rectangle(346, 0, 10, 210);
            //escada = new Escada(Content.Load<Texture2D>("Imagens/escada"), new Vector2(400, 30), 100, 300);
        }

        protected override void UnloadContent()
        {
            
        }

        public void AddObjetos()
        {
            switch (areaAtual)
            {
                case AreaAtual.AREA1_1:
                    corda.ativo = false;
                    escada1.ativo = false;
                    escada2.ativo = false;
                    escada3.ativo = false;
                    
                    break;

                case AreaAtual.AREA1_2:
                    escada1 = new Escada(texturaEscada, new Vector2(396, 140), 95, 440);
                    escadas.Add(escada1);

                    corda.ativo = false;
                    escada2.ativo = false;
                    escada3.ativo = false;
                    break;

                case AreaAtual.AREA1_3:
                    escada1 = new Escada(texturaEscada, new Vector2(417, 140), 72, 223);
                    escada2 = new Escada(texturaEscada, new Vector2(99, 372), 72, 176);
                    escada3 = new Escada(texturaEscada, new Vector2(732, 372), 72, 176);
                    escadas.Add(escada1);
                    escadas.Add(escada2);
                    escadas.Add(escada3);

                    corda = new Corda(Content.Load<Texture2D>("retangulo"), new Vector2(625, 162), 183);
                    cordas.Add(corda);

                    esteiras.Add(new Esteira(Content.Load<Texture2D>("retangulo"), new Vector2(360,377), 186, true));

                    if (chave1_3.ativo)
                    {
                        chaves.Add(chave1_3);
                    }

                    inimigos.Add(new Caveira(Content.Load<Texture2D>("Imagens/caveira"), new Vector2(700, 515), 60, 860));
                    if (porta1_3.fechada)
                    {
                        portas.Add(porta1_3);
                    }
                    
                    break;

                case AreaAtual.AREA1_4:
                    escada2.ativo = false;
                    escada3.ativo = false;

                    escada1 = new Escada(texturaEscada, new Vector2(101, 140), 71, 163);
                    escadas.Add(escada1);

                    corda = new Corda(Content.Load<Texture2D>("retangulo"), new Vector2(290, 305), 194);
                    cordas.Add(corda);

                    lancas.Add(new Lanca(Content.Load<Texture2D>("Imagens/lanca"), new Vector2(56, 307), true));
                    lancas.Add(new Lanca(Content.Load<Texture2D>("Imagens/lanca"), new Vector2(263, 366), false));
                    //lancas.Add(new Lanca(Content.Load<Texture2D>("Imagens/lanca"), new Vector2(230, 180), false));

                    espinhos.Add(new Espinho(Content.Load<Texture2D>("Imagens/espinho"), new Vector2(190, 515)));
                    espinhos.Add(new Espinho(Content.Load<Texture2D>("Imagens/espinho"), new Vector2(260, 515)));
                    break;

                case AreaAtual.AREA1_5:
                    escada2.ativo = false;
                    escada3.ativo = false;
                    escada1 = new Escada(texturaEscada, new Vector2(335, 113), 77, 189);
                    escadas.Add(escada1);

                    if (area1_5.corda)
                    {
                        corda = new Corda(Content.Load<Texture2D>("retangulo"), new Vector2(450, 83), 517);
                        cordas.Add(corda);
                    }

                    break;

                case AreaAtual.AREA1_6:
                    escada2.ativo = false;
                    escada3.ativo = false;
                    escada1 = new Escada(texturaEscada, new Vector2(276, 212), 88, 375);
                    escadas.Add(escada1);
                    break;

                case AreaAtual.AREA1_7:
                    escada3.ativo = false;
                    escada1 = new Escada(texturaEscada, new Vector2(161, 114), 84, 292);
                    escada2 = new Escada(texturaEscada, new Vector2(805, 101), 84, 320);
                    escadas.Add(escada1);
                    escadas.Add(escada2);

                    if (area1_5.corda)
                    {
                        corda = new Corda(Content.Load<Texture2D>("retangulo"), new Vector2(448, 0), 408);
                        cordas.Add(corda);
                    }

                    lancas.Add(new Lanca(Content.Load<Texture2D>("Imagens/lanca"), new Vector2(460, 220), false, 440, 481, 1));

                    if (porta1_7.fechada)
                    {
                        portas.Add(porta1_7);
                    }

                    plataformasMovimento.Add(new PlataformaMovimento(Content.Load<Texture2D>("retangulo"), new Vector2(100, 475), 86, 14, 888));

                    break;
            }
        }

        public void RemoverObjetos()
        {
            for (int e = escadas.Count - 1; e >= 0; e--)
            {
                escadas.RemoveAt(e);
            }

            for (int c = chaves.Count - 1; c >= 0; c--)
            {
                chaves.RemoveAt(c);
            }

            for (int s = esteiras.Count - 1; s >= 0; s--)
            {
                esteiras.RemoveAt(s);
            }

            for (int i = inimigos.Count - 1; i >= 0; i--)
            {
                inimigos.RemoveAt(i);
            }

            for (int p = portas.Count - 1; p >= 0; p--)
            {
                portas[p].ativo = false;
                portas.RemoveAt(p);
            }

            for (int c = cordas.Count - 1; c >= 0; c--)
            {
                cordas.RemoveAt(c);
            }

            for (int p = plataformasMovimento.Count - 1; p >= 0; p--)
            {
                plataformasMovimento.RemoveAt(p);
            }

            for (int l = lancas.Count - 1; l >= 0; l--)
            {
                lancas.RemoveAt(l);
            }

            for (int es = espinhos.Count - 1; es >= 0; es--)
            {
                espinhos.RemoveAt(es);
            }

        }

        public void ColizaoTerreno()
        {
            for (int s = 0; s < esteiras.Count; s++)
            {
                if(heroi.retanguloPe.Intersects(esteiras[s].retangulo))
                {
                    heroi.chao = true;

                    if (esteiras[s].direcao)
                    {
                        heroi.posicao.X += esteiras[s].velocidade;
                    }

                    if (esteiras[s].direcao == false)
                    {
                        heroi.posicao.X -= esteiras[s].velocidade;
                    }

                    if (heroi.pulando == false && heroi.subindo == false)
                    {
                        heroi.posicao.Y = esteiras[s].retangulo.Y - heroi.distanciaChao;
                    } 
                }
            }
            
            for (int a = 0; a < areas.Count; a++)
            {
                if(areas[a].ativo)
                {
                    if (heroi.retangulo.Intersects(areas[a].retanguloSaida1))
                    {
                        RemoverObjetos();
                        heroi.pulando = false;
                        heroi.tempoPulo = TimeSpan.Zero;
                        heroi.posicaoInicial = areas[a].posicaoInicial1;
                        heroi.posicao = areas[a].posicaoInicial1;
                        areaAtual = areas[a].saida1;

                        AddObjetos();
                    }

                    if (heroi.retangulo.Intersects(areas[a].retanguloSaida2))
                    {
                        RemoverObjetos();
                        heroi.pulando = false;
                        heroi.tempoPulo = TimeSpan.Zero;

                        heroi.posicaoInicial = areas[a].posicaoInicial2;
                        heroi.posicao = areas[a].posicaoInicial2;
                        areaAtual = areas[a].saida2;
                        
                        AddObjetos();
                    }

                    if (heroi.retangulo.Intersects(areas[a].retanguloSaida3))
                    {
                        RemoverObjetos();
                        heroi.pulando = false;
                        heroi.tempoPulo = TimeSpan.Zero;

                        heroi.posicaoInicial = areas[a].posicaoInicial3;
                        heroi.posicao = areas[a].posicaoInicial3;
                        areaAtual = areas[a].saida3;

                        AddObjetos();
                    }

                    for (int p = 0; p < plataformasMovimento.Count; p++)
                    {
                        if (heroi.retanguloPe.Intersects(plataformasMovimento[p].retangulo))
                        {
                            heroi.chao = true;

                            if (heroi.pulando == false && heroi.subindo == false)
                            {
                                heroi.posicao.Y = plataformasMovimento[p].retangulo.Y - heroi.distanciaChao;
                                heroi.posicao += plataformasMovimento[p].direcao;
                            }
                        }
                    }

                    for (int r = 0; r < areas[a].retangulos.Count; r++)
                    {
                        if (heroi.retanguloPe.Intersects(areas[a].retangulos[r]))
                        {
                            heroi.chao = true;

                            if (heroi.pulando == false && heroi.subindo == false)
                            {
                                heroi.posicao.Y = areas[a].retangulos[r].Y - heroi.distanciaChao;
                            }
                        }

                        if (heroi.retanguloCorpo.Intersects(areas[a].retangulos[r]) && heroi.retanguloCabeca.Intersects(areas[a].retangulos[r]) == false)
                        {
                            if (heroi.posicao.X < areas[a].retangulos[r].X)
                            {
                                if (heroi.dir)
                                {
                                    heroi.posicao.X = areas[a].retangulos[r].X - heroi.distanciaParedeDir;
                                }
                            }

                            if (heroi.posicao.X > areas[a].retangulos[r].X)
                            {
                                if (heroi.esq)
                                {
                                    heroi.posicao.X = areas[a].retangulos[r].X + areas[a].retangulos[r].Width - heroi.distanciaParedeEsq;
                                }
                            }

                            heroi.parede = true;
                        }

                        if (heroi.retanguloCabeca.Intersects(areas[a].retangulos[r]))
                        {
                            heroi.velocidadePulo = 0;
                            if (heroi.corda && heroi.subindo)
                            {
                                heroi.posicao.Y = areas[a].retangulos[r].Y + areas[a].retangulos[r].Height - 7;
                            }
                            if (heroi.pulando)
                            {
                                heroi.gravidade = 0;
                                heroi.posicao.Y = areas[a].retangulos[r].Y + areas[a].retangulos[r].Height - 7;
                            }
                        }
                    }
                } 
            }
        }

        public void ColisaoObjeto()
        {
            for (int c = 0; c < chaves.Count; c++)
            {
                if (chaves[c].ativo)
                {
                    if (heroi.retangulo.Intersects(chaves[c].retangulo))
                    {
                        hud.chaveDourada += 1;
                        chaves[c].ativo = false;
                    }
                }
            }

            for (int l = 0; l < lancas.Count; l++)
            {
                if (heroi.retanguloPe.Intersects(lancas[l].retanguloCabo))
                {
                    heroi.chao = true;

                    if (heroi.pulando == false && heroi.subindo == false)
                    {
                        heroi.posicao.Y = lancas[l].retanguloCabo.Y - heroi.distanciaChao;

                        if (heroi.parede == false)
                        {
                            heroi.posicao.X += lancas[l].direcao;
                        }
                    }
                }

                if (heroi.retangulo.Intersects(lancas[l].retanguloPonta))
                {
                    heroi.morte = true;
                }
            }

            for (int p = 0; p < portas.Count; p++)
            {
                if (heroi.retangulo.Intersects(portas[p].retangulo) && portas[p].ativo)
                {
                    if (portas[p].fechada)
                    {
                        if (heroi.posicao.X < portas[p].posicao.X && heroi.dir)
                        {
                            heroi.posicao.X = portas[p].posicao.X - heroi.distanciaParedeDir;
                        }
                        if (heroi.posicao.X > portas[p].posicao.X && heroi.esq)
                        {
                            heroi.posicao.X = portas[p].posicao.X + portas[p].textura.Width - heroi.distanciaParedeEsq;
                        }
                    }
                    if (hud.chaveDourada >= 1 && portas[p].tipo == 1)
                    {
                        portas[p].fechada = false;
                        for (int pf = portas.Count - 1; pf >= 0; pf--)
                        {
                            portas.RemoveAt(pf);
                        }
                    }
                }
            }

            if (heroi.retangulo.Intersects(corda.retangulo))
            {
                heroi.corda = true;
                if (heroi.subindo)
                {
                    heroi.posicao.X = corda.posicao.X - 27;
                }
            }
            else
            {
                heroi.corda = false;
            }

            if (heroi.retangulo.Intersects(escada1.retanguloescada) && escada1.ativo || heroi.retangulo.Intersects(escada2.retanguloescada) && escada2.ativo || heroi.retangulo.Intersects(escada3.retanguloescada) && escada3.ativo)
            {
                heroi.escada = true;
            }
            else
            {
                heroi.escada = false;

                if (heroi.corda == false)
                {
                    heroi.subindo = false;
                }
            }
            
            if (heroi.retangulo.Intersects(escada1.retanguloescada))
            {
                if (heroi.subindo)
                {
                    heroi.posicao.X = (escada1.posicao.X + (escada1.retangulo.Width / 2)) - 27;
                }
            }
           
            if (heroi.retangulo.Intersects(escada2.retanguloescada))
            {
                if (heroi.subindo)
                {
                    heroi.posicao.X = (escada2.posicao.X + (escada2.retangulo.Width / 2)) - 27;
                }
            }

            if (heroi.retangulo.Intersects(escada3.retanguloescada))
            {
                if (heroi.subindo)
                {
                    heroi.posicao.X = (escada3.posicao.X + (escada3.retangulo.Width / 2)) - 27;
                }
            }

            if (heroi.retanguloPe.Intersects(escada1.retanguloTopo) && escada1.ativo)
            {
                heroi.chao = true;

                heroi.escada = true;

                if (heroi.baixo)
                {
                    heroi.descerEscada = true;
                }

                if (heroi.pulando == false && heroi.subindo == false && heroi.descerEscada == false)
                {
                    heroi.posicao.Y = escada1.retanguloTopo.Y - heroi.distanciaChao;
                }
            }
            else
            {
                heroi.descerEscada = false;
            }

            if (heroi.retanguloPe.Intersects(escada2.retanguloTopo) && escada2.ativo)
            {
                heroi.chao = true;

                heroi.escada = true;

                if (heroi.baixo)
                {
                    heroi.descerEscada = true;
                }

                if (heroi.pulando == false && heroi.subindo == false && heroi.descerEscada == false)
                {
                    heroi.posicao.Y = escada2.retanguloTopo.Y - heroi.distanciaChao;
                }
            }

            if (heroi.retanguloPe.Intersects(escada3.retanguloTopo) && escada3.ativo)
            {
                heroi.chao = true;

                heroi.escada = true;

                if (heroi.baixo)
                {
                    heroi.descerEscada = true;
                }

                if (heroi.pulando == false && heroi.subindo == false && heroi.descerEscada == false)
                {
                    heroi.posicao.Y = escada3.retanguloTopo.Y - heroi.distanciaChao;
                }
            }
        }

        public void ColisaoInimigos()
        {
            for (int i = 0; i < inimigos.Count; i++)
            {
                if(heroi.retangulo.Intersects(inimigos[i].retangulo))
                {
                    heroi.posicao = heroi.posicaoInicial;
                    heroi.vidas -= 1;
                    inimigos[i].ativo = false;
                    inimigos.RemoveAt(i);
                    i--;
                }
            }
        }

        public void PassagensSecretas()
        {
            switch (areaAtual)
            {
                case AreaAtual.AREA1_2:
                    if (heroi.retangulo.Intersects(passagemSecreta1_2))
                    {
                        area1_2.textura = Content.Load<Texture2D>("Imagens/area 2S");
                    }

                    if (heroi.retangulo.Intersects(passagemSecreta1_2_2))
                    {
                        area1_2.textura = Content.Load<Texture2D>("Imagens/area 2");
                    }
                    break;

                case AreaAtual.AREA1_6:
                    if (heroi.retangulo.Intersects(passagemSecreta1_6))
                    {
                        area1_6.textura = Content.Load<Texture2D>("Imagens/area6S");
                    }

                    if (heroi.retangulo.Intersects(passagemSecreta1_6_2))
                    {
                        area1_6.textura = Content.Load<Texture2D>("Imagens/area6");
                    }
                    break;
            }
        }

        public void Eventos()
        {
            if (area1_4.portaFechada)
            {
                area1_4.textura = Content.Load<Texture2D>("Imagens/area4_2");
            }

            if (heroi.retangulo.Intersects(retanguloEventoArea1_4) && evento1_4 && areaAtual == AreaAtual.AREA1_4)
            {
                ultimaAreaAtual = AreaAtual.AREA1_4;
                area1_4.portaFechada = true;
                estadoJogo = EstadoJogo.EVENTO1_4;
                evento1_4 = false;
            }
        }

        public void GameOver()
        {
            for (int a = 0; a < areas.Count; a++)
            {
                for (int r = 0; r < areas[a].retanguloMorte.Count; r++)
                {
                    if(heroi.retangulo.Intersects(areas[a].retanguloMorte[r]))
                    {
                        heroi.vidas -= 1;
                        heroi.posicao = heroi.posicaoInicial;
                    }
                }
            }

            if (heroi.morte)
            {
                heroi.vidas -= 1;
                heroi.posicao = heroi.posicaoInicial;
                heroi.morte = false;
            }
        }

        protected override void Update(GameTime gameTime)
        {
            teclado = Keyboard.GetState();
            switch (estadoJogo)
            {
                case EstadoJogo.TITULO:
                    if(teclado.IsKeyDown(Keys.Enter))
                    {
                        AddObjetos();
                        estadoJogo = EstadoJogo.JOGO;
                    }
                    break;

                case EstadoJogo.JOGO:
                    testeRetangulo.Update();

                    heroi.Update(gameTime);

                    for (int l = 0; l < lancas.Count; l++)
                    {
                        lancas[l].Update(gameTime);
                    }
                    for (int i = 0; i < inimigos.Count; i++)
                    {
                        inimigos[i].Update(gameTime);
                    }

                    ColizaoTerreno();
                    ColisaoObjeto();
                    ColisaoInimigos();
                    GameOver();
                    Eventos();
                    PassagensSecretas();

                    for (int p = 0; p < plataformasMovimento.Count; p++)
                    {
                        plataformasMovimento[p].Update();
                    }

                        switch (areaAtual)
                        {
                            case AreaAtual.AREA1_5:
                                tempoCordaContinuar = TimeSpan.Zero;
                                break;

                            case AreaAtual.AREA1_7:
                                tempoCordaContinuar += gameTime.ElapsedGameTime;
                                if (tempoCordaContinuar.TotalMilliseconds < 50)
                                {
                                    if (area1_5.corda)
                                    {
                                        heroi.CordaContinuar();
                                    }
                                }

                                if (tempoCordaContinuar.TotalMilliseconds >= 50)
                                {
                                    if (heroi.corda == false)
                                        heroi.subindo = false;
                                }
                                break;
                        }

                    break;

                case EstadoJogo.EVENTO1_4:
                    tempoFimEvento += gameTime.ElapsedGameTime;

                    if (tempoFimEvento.TotalSeconds >= 5)
                    {
                        RemoverObjetos();
                        AddObjetos();
                        areaAtual = ultimaAreaAtual;
                        estadoJogo = EstadoJogo.JOGO;
                        heroi.posicaoInicial = new Vector2(798, 250);
                        heroi.posicao = heroi.posicaoInicial;
                        tempoFimEvento = TimeSpan.Zero;
                    }
                    break;
            }
            
            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.Black);
            spriteBatch.Begin();

            switch (estadoJogo)
            {
                case EstadoJogo.TITULO:
                    spriteBatch.DrawString(fonte, "Pressione Enter", new Vector2(graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight / 2), Color.White);

                    break;

                case EstadoJogo.JOGO:

                    foreach (Espinho espinho in espinhos)
                    {
                        espinho.Draw(spriteBatch);
                    }
                    
                    foreach (Lanca lanca in lancas)
                    {
                        lanca.Draw(spriteBatch);
                        //spriteBatch.Draw(Content.Load<Texture2D>("retangulo"), lanca.retanguloPonta, Color.White);
                    }
                
                    switch (areaAtual)
                    {
                        case AreaAtual.AREA1_1:
                            GraphicsDevice.Clear(Color.CornflowerBlue);
                            area1_1.Draw(spriteBatch);
                            area1_2.ativo = false;
                            break;

                        case AreaAtual.AREA1_2:
                            area1_2.Draw(spriteBatch);
                            area1_1.ativo = false;
                            area1_3.ativo = false;
                            break;

                        case AreaAtual.AREA1_3:
                            area1_3.Draw(spriteBatch);
                            area1_2.ativo = false;
                            area1_4.ativo = false;
                            break;

                        case AreaAtual.AREA1_4:
                            area1_4.Draw(spriteBatch);
                            area1_3.ativo = false;
                            area1_5.ativo = false;
                            break;

                        case AreaAtual.AREA1_5:
                            area1_5.Draw(spriteBatch);
                            area1_4.ativo = false;
                            area1_6.ativo = false;
                            area1_7.ativo = false;
                            break;

                        case AreaAtual.AREA1_6:
                            area1_6.Draw(spriteBatch);
                            area1_5.ativo = false;
                            break;

                        case AreaAtual.AREA1_7:
                            area1_7.Draw(spriteBatch);
                            area1_6.ativo = false;
                            area1_5.ativo = false;
                            break;
                    }

                    //spriteBatch.Draw(Content.Load<Texture2D>("retangulo"), heroi.retangulo, Color.White);
                    //spriteBatch.Draw(Content.Load<Texture2D>("retangulo"), heroi.retanguloPe, Color.Red);
                    //spriteBatch.Draw(Content.Load<Texture2D>("retangulo"), heroi.retanguloCorpo, Color.Green);
                    //spriteBatch.Draw(Content.Load<Texture2D>("retangulo"), heroi.retanguloCabeca, Color.Yellow);

                    foreach (Porta porta in portas)
                    {
                        porta.Draw(spriteBatch);
                    }

                    foreach (PlataformaMovimento plataforma in plataformasMovimento)
                    {
                        plataforma.Draw(spriteBatch);
                    }

                    foreach (Corda corda in cordas)
                    {
                        corda.Draw(spriteBatch);
                    }

                    foreach (Escada escada in escadas)
                    {
                        escada.Draw(spriteBatch);
                    }

                    foreach (Esteira esteira in esteiras)
                    {
                        esteira.Draw(spriteBatch);
                    }

                    foreach (Chave chave in chaves)
                    {
                        if (chave.ativo)
                        {
                            chave.Draw(spriteBatch);
                        }
                    }

                    //inimigo.Draw(spriteBatch);

                    foreach (Inimigo inimigo in inimigos)
                    {
                        
                        //spriteBatch.Draw(Content.Load<Texture2D>("retangulo"), inimigo.retangulo, Color.Red);
                        inimigo.Draw(spriteBatch);
                    }
                    

                    heroi.Draw(spriteBatch);

                    if (testeRetangulo.ativo)
                    {
                        testeRetangulo.Draw(spriteBatch);
                    }

                    if (testeRetangulo.ativo)
                    {
                        spriteBatch.DrawString(fonte, "X:" + testeRetangulo.posicao.X + "/ Y:" + testeRetangulo.posicao.Y + "/ largura:" + testeRetangulo.largura + "/ altura" + testeRetangulo.altura, Vector2.Zero, Color.White);
                        testeRetangulo.Draw(spriteBatch);
                    }
                    break;

                case EstadoJogo.EVENTO1_4:
                    spriteBatch.DrawString(fonte, "Evento Ocorrendo", new Vector2(graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight / 2), Color.White);
                    break;
            }
            spriteBatch.End();

            base.Draw(gameTime);
        }
    }
}
